{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# python内置容器对象索引与切片\n",
    "创建内容为\"data analysis\"的字符串、列表、元组、ndarray变量。\n",
    "（1）分别完成索引出第二个字符't';\n",
    "（2）切片获得\"analysis\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data analysis <class 'str'>\n",
      "['d', 'a', 't', 'a', ' ', 'a', 'n', 'a', 'l', 'y', 's', 'i', 's'] <class 'list'>\n",
      "('d', 'a', 't', 'a', ' ', 'a', 'n', 'a', 'l', 'y', 's', 'i', 's') <class 'tuple'>\n",
      "['d' 'a' 't' 'a' ' ' 'a' 'n' 'a' 'l' 'y' 's' 'i' 's'] <U1\n",
      "字符串索引 t\n",
      "字符串切片 analysis\n",
      "列表索引 t\n",
      "列表切片 ['a', 'n', 'a', 'l', 'y', 's', 'i', 's']\n",
      "元组索引 t\n",
      "元组切片 ('a', 'n', 'a', 'l', 'y', 's', 'i', 's')\n",
      "ndarray索引 d\n",
      "ndarray切片 ['a' 'n' 'a' 'l' 'y' 's' 'i' 's']\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "a_string = \"data analysis\"\n",
    "b_list = list(\"data analysis\")\n",
    "c_dict = tuple(\"data analysis\")\n",
    "d_ndarray = np.array(list(\"data analysis\"))\n",
    "print(a_string, type(a_string))\n",
    "print(b_list, type(b_list))\n",
    "print(c_dict, type(c_dict))\n",
    "print(d_ndarray, d_ndarray.dtype)\n",
    "\n",
    "# 字符串\n",
    "print(\"字符串索引\", a_string[2])\n",
    "print(\"字符串切片\", a_string[5:])\n",
    "\n",
    "# 列表切片\n",
    "print(\"列表索引\", b_list[2])\n",
    "print(\"列表切片\", b_list[5:])\n",
    "\n",
    "# 元组索引\n",
    "print(\"元组索引\", c_dict[2])\n",
    "print(\"元组切片\", c_dict[5:])\n",
    "\n",
    "# ndarray\n",
    "print(\"ndarray索引\", d_ndarray[0])\n",
    "print(\"ndarray切片\", d_ndarray[5:])\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 一维数组的索引与切片\n",
    "创建0-20之间间隔为2的一维数组，并打印\n",
    "（1）索引最后一个数值\n",
    "（2）索引第8个数字的数值\n",
    "（3）切片第1-7的内容\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 0  2  4  6  8 10 12 14 16 18]\n",
      "最后一个数值索引 18\n",
      "第8个数值索引 14\n",
      "切片第1-7的内容 [ 0  2  4  6  8 10 12]\n"
     ]
    }
   ],
   "source": [
    "a = np.arange(0, 20, 2)\n",
    "print(a)\n",
    "print(\"最后一个数值索引\", a[-1])    # 倒序索引\n",
    "print(\"第8个数值索引\", a[7])    # 起始为0\n",
    "print(\"切片第1-7的内容\", a[0:7])  # 最后一个数值不取"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 二维数组的索引与切片\n",
    "创建一个2行3列的二维数组，并打印\n",
    "（1）索引第2行\n",
    "（2）索引第一行，第二个元素\n",
    "（3）切片所有行，第2-3列"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1 2 3]\n",
      " [4 5 6]]\n",
      "索引第二行 [4 5 6]\n",
      "索引第一行，第二个元素 2\n",
      "索引第一行，第二个元素(递归) 2\n",
      "切片所有行，第2-3列 [[2 3]\n",
      " [5 6]]\n"
     ]
    }
   ],
   "source": [
    "a = np.array([[1, 2, 3], [4, 5, 6]])\n",
    "print(a)\n",
    "print(\"索引第二行\", a[1])\n",
    "print(\"索引第一行，第二个元素\", a[0, 1])\n",
    "print(\"索引第一行，第二个元素(递归)\", a[0][1])\n",
    "print(\"切片所有行，第2-3列\", a[:, 1:3])"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python-data-analysis",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.19"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
